﻿//#include<queue>
//class Date
//{
//public:
//	Date(int year = 1, int month = 1, int day = 1)
//		:_year(year), _month(month), _day(day)
//	{
//		cout << "Date(int year, int month, int day)" << endl;
//	}
//
//	Date(const Date& d)
//		:_year(d._year), _month(d._month), _day(d._day)
//	{
//		cout << "Date(const Date& d)" << endl;
//	}
//private:
//	int _year = 1;
//	int _month = 1;
//	int _day = 1;
//};
//int main()
//{
//	auto DateLess = [](const Date* p1, const Date* p2)
//	{
//		return p1 < p2;
//	};
//
//	//lambda对象可以拷贝构造，但禁掉了默认构造
//	//decltype(DateLess) xx;
//
//	//priority_queue<Date*, vector<Date*>, decltype(DateLess)> p1(DateLess);
//	priority_queue<Date*, vector<Date*>, decltype(DateLess)> p1; //使用decltype可推导出类型
//  //使用错误，因为DateLess只是名称，不是类型，接收的是匿名函数
//	//priority_queue<Date*, vector<Date*>, DateLess> p1; 
//	return 0;
//}

//#include <iostream>
//using namespace std;
//template<class F, class T>
//T useF(F f, T x)
//{
//	static int count = 0;
//	cout << "count:" << ++count << endl;
//	cout << "count:" << &count << endl;
//	return f(x);
//}
//double f(double i)
//{
//	return i / 2;
//}
//struct Functor
//{
//	double operator()(double d)
//	{
//		return d / 3;
//	}
//};
//int main()
//{
//	//函数名
//	cout << useF(f, 11.11) << endl;
//	//函数对象
//	cout << useF(Functor(), 11.11) << endl;
//	//lamber表达式
//	cout << useF([](double d)->double { return d / 4; }, 11.11) << endl;
//	return 0;
//}

//#include <iostream>
//using namespace std;
//template<class F, class T>
//T useF(F f, T x)
//{
//	static int count = 0;
//	cout << "count:" << ++count << endl;
//	cout << "count:" << &count << endl;
//	return f(x);
//}
//double f(double i)
//{
//	return i / 2;
//}
//struct Functor
//{
//	double operator()(double d)
//	{
//		return d / 3;
//	}
//};
//int main()
//{
//	//函数名
//	cout << useF(f, 11.11) << endl;
//	cout << endl;
//	//函数对象
//	cout << useF(Functor(), 11.11) << endl;
//	cout << endl;
//	//lamber表达式
//	cout << useF([](double d)->double { return d / 4; }, 11.11) << endl;
//	cout << endl;
//	return 0;
//}

